package com.lagou.edu.controller;

import com.lagou.edu.domain.User;
import com.lagou.edu.service.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

/**
 * Created by shixi  on 2021/1/27
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserServiceImpl userService;

    /**
     * 注册接口
     * @param email
     * @param password
     * @param code
     * @return
     */
    @RequestMapping("/register/{email}/{password}/{code}")
    public boolean register(
            @PathVariable(value = "email") String email,
            @PathVariable(value = "password") String password,
            @PathVariable(value = "code") String code){

        return userService.register(email,password,code);
    }

    /**
     * 是否已注册，根据邮箱判断,true代表已经注册过，false代表尚未注册
     * @param email
     * @return
     */
    @RequestMapping("/isRegistered/{email}")
    public boolean isRegistered(@PathVariable(value = "email") String email){
        return userService.isRegistered(email);
    }

    /**
     * 邮箱地址登录接⼝，验证⽤户名密码合法性，
     * 根据⽤户名和密码⽣成token，token存⼊数据库，
     * 并写⼊cookie中，登录成功返回邮箱地址，重定向到欢迎⻚
     * @param email
     * @param password
     * @return
     */
    @RequestMapping("/login/{email}/{password}")
    public String login(
            @PathVariable(value = "email") String email,
            @PathVariable(value = "password") String password,
            HttpServletResponse response){
        User user = userService.login(email, password);
        if(user != null){
            Cookie cookie = new Cookie("token",user.getToken());
            cookie.setMaxAge(60*10);//有效期10分钟
            // 可以为负数，表示此cookie只是存储在浏览器内存里，只要关闭浏览器，此cookie就会消失
            // maxAge默认值为-1。
            // 还可以为0，表示从客户端电脑或浏览器内存中删除此cookie。
            // maxAge 可以为正数，表示此cookie从创建到过期所能存在的时间，以秒为单位，
            // 此cookie会存储到客户端电脑，以cookie文件形式保存，
            // 不论关闭浏览器或关闭电脑，直到时间到才会过期
            response.addCookie(cookie);
            return user.getEmail();
        }
        return null;
    }
    /**
     * 邮箱地址 根据token查询⽤户登录邮箱接⼝
     */
    @RequestMapping("/info/{token}")
    public String info(@PathVariable(value = "token") String token){
        return userService.getEmailByToken(token);
    }

}
